package db;

import util.Config;
import java.sql.*;

public class DBUnit {

	// 数据库连接
	Connection connect = null;
	// 执行语句
	PreparedStatement ps = null;
	// 返回结果集
	ResultSet rs = null;
	
	// 获取连接
	public Connection getConnection() {
		// 通过Config获取MySQL数据库配置信息
		String driver = Config.getValue("driver");
		String url = Config.getValue("url");
		String pwd = Config.getValue("password");
		String user = Config.getValue("user");
		try {
			// 指定驱动程序
			Class.forName(driver);
			// 建立数据库连结
			connect = DriverManager.getConnection(url, user, pwd);
			
			return connect;
		} catch (Exception e) {
			// 如果连接过程出现异常，抛出异常信息
			//throw new SQLException("驱动错误或连接失败！");
			e.printStackTrace();
		}
		return null;
	}
	
	// 执行查询
	public ResultSet executeQuery(String preparedSql, Object[] param) {
		// 处理SQL,执行SQL
		try {
			// 得到PreparedStatement对象
			ps = connect.prepareStatement(preparedSql);
			if (param != null) {
				for (int i = 0; i < param.length; i++) {
					// 为预编译sql设置参数
					ps.setObject(i + 1, param[i]);
				}
			}
			// 执行SQL语句
			rs = ps.executeQuery();
		} catch (SQLException e) {
			// 处理SQLException异常
			e.printStackTrace();
		}
		return null;
		
	}
	
	// 执行更新
	public int executeUpdate(String preparedSql, Object[] param) {
		int num = 0;// 记录添加一行后，DB中的数据条数
		// 处理SQL,执行SQL
		try {
			// 得到PreparedStatement对象
			// 比如插入一行数据，首先选出一行，再用参数param填写改行每列
			ps = connect.prepareStatement(preparedSql);
			if (param != null) {
				for (int i = 0; i < param.length; i++) {
					// 为预编译sql设置参数
					ps.setObject(i+1, param[i]);
				}
			}
			// 执行SQL语句，返回添加的该行的序号，即数据库总行数
			num = ps.executeUpdate();
		} catch (SQLException e) {
			// 处理SQLException异常
			e.printStackTrace();
		}
		return num;
	}
	
	// 关闭资源
	public void closeAll() {
		// 如果结果集不空
		if(rs != null) {
			try {
				rs.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
		// 如果执行语句不空，关闭
		if(ps != null) {
			try {
				ps.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
		// 如果连接不空，关闭连接
		if(connect != null) {
			try {
				connect.close();
			}catch(SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new DBUnit().getConnection();
		System.out.println("数据库连接成功");
	}

}
